// 引入输入, 输出模块
const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
let start = [];
let end = [];
let workStart = 8 * 60;
let workEnd = 20 * 60;
let n;
let initArr = []
rl.on("line", (line) => {
    // 第一次输入的是开始时间
    if (start.length === 0) {
        const temp = line.trim().split(" ").map(Number)
        start = temp[0] * 60 + temp[1]
        // 第二次输入的是结束时间
    } else if (end.length === 0) {
        const temp = line.trim().split(" ").map(Number)
        end = temp[0] * 60 + temp[1]
        // 然后输入N
    } else if (n === undefined) {
        n = Number(line.trim())
    } else {
        let temp = line.trim().split(" ").map(Number)
        initArr.push(temp)
        if (initArr.length === n) {
            getResult(start, end, n, initArr);

            //收尾处理
            start = []
            end = []
            n = undefined
            initArr.length = 0
        }
    }

})

/**
 *
 * @param start 出门时间
 * @param end 个人要求结束时间
 * @param n //  n个核酸监测点
 * @param initArr // 核酸监测点信息
 */
function getResult(start, end, n, initArr) {
    // 需要计算每个核酸点的 路程时间 + 排队时间 + 花费
    let resultArr = [] // 内部元素[id, 时间花费, 费用]

    for (let i = 0; i < initArr.length; i++) {
        const arr = initArr[i];
        let id = arr[0]
        let distance = arr[1]
        let waitNum = arr[2]

        let time_1 = distance * 10 // 打车时间
        let time_2 = getWaitTime(start, time_1, waitNum)// 排队时间
        if (time_1 + time_2 >= workEnd) continue; // 超时了
        if (time_1 + time_2 >= end) continue; // 超时了

        resultArr.push([id, time_1 + time_2, distance * 10])
    }

    // 排序
    resultArr.sort((arr1, arr2) => {
        if(arr1[1] === arr2[1]) { // 时间花费相同
            if(arr1[2] === arr2[2]) { // 打车费用相同
                return arr1[0] - arr2[0]
            } else {
                return arr1[2] - arr2[2]
            }
        } else {
            return arr1[1] - arr2[1]
        }
    })

    // 输出
    console.log(resultArr.length);
    resultArr.forEach((arr)=>{
        console.log(`${arr[0]} ${arr[1]} ${arr[2]}`)
    })
}

/**
 *
 * @param start 出门时间
 * @param timeAdd 打车时间
 * @param startNum 出门时,等待人数
 * @returns {any}
 */

function getWaitTime(start, timeAdd, startNum) {
    let arr = new Array(timeAdd + 1).fill(0)
    arr[0] = startNum;
    let count = 0
    for (let index = 1; index < arr.length; index++) {
        // 工作时间范围内
        let realIndex = index + start
        if (workStart <= realIndex && realIndex <= workEnd) {
            if (8 * 60 < realIndex && realIndex <= 10 * 60) {
                arr[index] = arr[index - 1] + 3 - 1
                arr[index] < 0 ? arr[index] = 0 : ""
                continue
            }
            if (12 * 60 < realIndex && realIndex <= 14 * 60) {
                arr[index] = arr[index - 1] + 10 - 1
                arr[index] < 0 ? arr[index] = 0 : ""
                continue
            }
            if (18 * 60 < realIndex && realIndex <= 20 * 60) {
                arr[index] = arr[index - 1] + 10 - 1
                arr[index] < 0 ? arr[index] = 0 : ""
                continue
            }
            // 其他时段
            count++
            if (count !== 0 && count % 5 === 0) {
                arr[index] = arr[index - 1] - 1 + 1
            } else {
                arr[index] = arr[index - 1] - 1
            }
            arr[index] < 0 ? arr[index] = 0 : ""
        }
    }
    return arr[arr.length - 1]
}
